jQuery Templates - {Supported Tags}

Posted by hajan on ASP.net Weblogs See other posts from ASP.net Weblogs or by hajan
Published on Tue, 14 Dec 2010 21:34:00 GMT Indexed on 2010/12/16 4:11 UTC
Read the original article Hit count: 533

Filed under:
|
|

I have started with Introduction to jQuery Templates, then jQuery Templates - tmpl(), template() and tmplItem() functions. In this blog we will see what supported tags are available in the jQuery Templates plugin.

Template tags can be used inside template together in combination with HTML tags and plain text, which helps to iterate over JSON data.

Up to now, there are several supported tags in jQuery Templates plugin:

  • ${expr} or {{= expr}}
  • {{each itemArray}} … {{/each}}
  • {{if condition}} … {{else}} … {{/if}}
  • {{html …}}
  • {{tmpl …}}
  • {{wrap …}} … {{/wrap}}

 

- ${expr} or {{= expr}}

Is used for insertion of data values in the rendered template. It can evaluate fields, functions or expression.

Example:

<script id="attendeesTemplate" type="text/html">
    <li> ${Name} {{= Surname}} </li>        
</script>

Either ${Name} or {{= Surname}} (with blank space between =<blankspace>Field) will work.

 

- {{each itemArray}} … {{/each}}

each is everywhere the same "(for)each", used to loop over array or collection

Example:

<script id="attendeesTemplate" type="text/html">
    <li>
        ${Name} ${Surname}
        {{if speaker}}
            (<font color="red">speaks</font>)
        {{else}}
            (attendee)
        {{/if}}        
        {{each phones}}                
            <br />
            ${$index}: <em>${$value}</em>
        {{/each}}        
    </li>
</script>

So, you see we can use ${$index} and ${$value} to get the current index and value while iterating over the item collection.

Alternatively, you can add index,value on the following way:

{{each(i,v) phones}}
    <br />
    ${i}: <em>${v}</em>
{{/each}}

Result would be:


Here is complete working example that you can run and see the result:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Nesting and Looping Example :: jQuery Templates</title>
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.4.min.js" type="text/javascript"></script>
    <script src="http://ajax.aspnetcdn.com/ajax/jquery.templates/beta1/jquery.tmpl.js" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">
        $(function () {
            var attendees = [
                { Name: "Hajan", Surname: "Selmani", speaker: true, phones:[070555555, 071888999, 071222333] },
                { Name: "Someone", Surname: "Surname", phones: [070555555, 071222333] },
                { Name: "Third", Surname: "Thirdsurname", phones: [070555555, 071888999, 071222333] },
            ];

            $("#attendeesTemplate").tmpl(attendees).appendTo("#attendeesList");
        });
    </script>

    <script id="attendeesTemplate" type="text/html">
        <li>
            ${Name} ${Surname}
            {{if speaker}}
                (<font color="red">speaks</font>)
            {{else}}
                (attendee)
            {{/if}}        
            {{each(i,v) phones}}
                <br />
                ${i}: <em>${v}</em>
            {{/each}}        
        </li>
    </script>
</head>
<body>
    <ol id="attendeesList"></ol>    
</body>
</html>

 

- {{if condition}} … {{else}} … {{/if}}

Standard if/else statement. Of course, you can use it without the {{else}} if you have such condition to check, however closing the {{/if}} tag is required.

Example:

{{if speaker}}
    (<font color="red">speaks</font>)
{{else}}
    (attendee)
{{/if}}

You have this same code block in the above complete example showing the 'each' cycle ;).

 

- {{html …}}

Is used for insertion of HTML markup strings in the rendered template. Evaluates the specified field on the current data item, or the specified JavaScript function or expression.

Example:

- without {{html …}}

<script language="javascript" type="text/javascript">
  $(function () {
  var attendees = [
            { Name: "Hajan", Surname: "Selmani", Info: "He <font color='red'>is the speaker of today's</font> session", speaker: true },
        ];

  $("#myTemplate").tmpl(attendees).appendTo("#speakers");
});
</script>

<script id="myTemplate" type="text/html">
    ${Name} ${Surname} <br />
    ${Info}
</script>

Result:

- with {{html …}}

<script language="javascript" type="text/javascript">
  $(function () {
  var attendees = [
            { Name: "Hajan", Surname: "Selmani", Info: "He <font color='red'>is the speaker of today's</font> session", speaker: true },
        ];

  $("#myTemplate").tmpl(attendees).appendTo("#speakers");
});
</script>

<script id="myTemplate" type="text/html">
    ${Name} ${Surname} <br />
    {{html Info}}
</script>

Result:

 

- {{wrap …}}

It’s used for composition and incorporation of wrapped HTML. It’s similar to {{tmpl}}

Example:

<script id="myTmpl" type="text/html">
    <div id="personInfo">
    <br />
    ${Name} ${Surname}
    {{wrap "#myWrapper"}}
        <h2>${Info}</h2>
        <div>
            {{if speaker}}
                (speaker)
            {{else}}
                (attendee)
            {{/if}}
        </div>
    {{/wrap}}
    </div>
</script>

<script id="myWrapper" type="text/html">
    <table><tbody>
        <tr>
            {{each $item.html("div")}}
                <td>
                    {{html $value}}
                </td>
            {{/each}}
        </tr>
    </tbody></table>
</script>

All the HTMl content inside the {{wrap}} … {{/wrap}} is available to the $item.html(filter, textOnly) method. In our example, we have defined some standard template and created wrapper which calls the other template with id myWrapper. Then using $item.html(“div”) we find the div tag and render the html value (together with the div tag) inside the <td> … </td>. So, here inside td the <div> <speaker or attendee depending of the condition> </div>  will be rendered.

The HTML output from this is:

 

- {{tmpl …}}

Used for composition as template items

Example:

<script id="myTemplate" type="text/html">
    <div id="bookItem">
        <div id="bookCover">
            {{tmpl "#bookCoverTemplate"}}
        </div>
        <div id="bookDetails">
            <div id="book">            
                ${title} - ${author}
            </div>
            <div id="price">$${price}</div>
            <div id="Details">${pages} pgs. - ${year} year</div>
        </div>
    </div>
</script>

<script id="bookCoverTemplate" type="text/html">
    <img src="${image}" alt="${title} Image" />
</script>

In this example, using {{tmpl “#bookCoverTemplate”}} I’m calling another template inside the first template. In the other template I’ve created template for a book cover.

The rendered HTML of this is:

and

 

So we have seen example for each of the tags that are right now available in the jQuery Templates (beta) plugin which is created by Microsoft as a contribution to the open source jQuery Project.

I hope this was useful blog post for you.

Regards,
Hajan

NEXT - jQuery Templates with ASP.NET MVC

© ASP.net Weblogs or respective owner

Related posts about ASP.NET

Related posts about jQuery